package cn.tedu.search.repository;


import cn.tedu.search.entity.Item;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface ItemRepository extends ElasticsearchRepository<Item,Long> {

    // SpringData自定义查询
    // 我们要编写遵循SpringData给定的格式的方法名
    // SpringData会根据方法名自动推断出查询的意图，自动生成查询语句
    // query(查询)表示当前方法是一个查询方法
    // Items(要查询实体类的名称)
    // By(通过\根据)
    // Title(实体类中的字段，可以是别的字段)
    // Matches(匹配)：执行的查询条件

    Iterable<Item> queryItemsByTitleMatches(String title);

    // 多条件自定义查询
    // 多个条件之间要用and或or来分割，百世多个条件之间的逻辑关系

    Iterable<Item> queryItemsByTitleMatchesAndBrandMatches(String title,String brand);

    // 排序查询
    Iterable<Item> queryItemsByTitleMatchesOrBrandMatchesOrderByPriceDesc(String title,String brand);

    // 分页查询
    // 返回值类型需要修改Page类型，这个类型既可以保存从ES中查询的数据
    // 又可以保存当前分页查询的分页信息：当前页码，每页条数，总条数，总页数
    // 参数方面，需要在参数末尾添加一个Pageable类型的参数
    // 这个类型的对象包含要查询的页码和每页的条数
    Page<Item> queryItemsByTitleMatchesOrBrandMatchesOrderByPriceDesc(String title, String brand, Pageable pageable);
}
